
#include "param_storage.hpp"

// 示例的参数定义方法
[[maybe_unused]] constexpr static inline const paramfw::meta demoParams[] = {
        paramfw::define ("PARAM_0", 0_s08),
        paramfw::define ("PARAM_1", 1_u08),
        paramfw::define ("PARAM_2", 2_s16),
        paramfw::define ("PARAM_3", 3_u16),
        paramfw::define ("PARAM_4", 4_s32),
        paramfw::define ("PARAM_5", 1_u32),
        paramfw::define ("PARAM_6", 5_s64),
        paramfw::define ("PARAM_7", 6_u64),
        paramfw::define ("PARAM_8", 7._f32),
        paramfw::define ("PARAM_9", 8._f64),
        paramfw::define ("PARAM_X", "Hello"),
};

static inline auto * reg = paramfw::registry::getInstance ();
static inline auto * sim = new paramfw::FlashSim {1024};

int main (const int _argc, const char * const _argv[], const char * const _envp[]) {

    // 初始化参数列表
    reg->init (demoParams, sizeof (demoParams) / sizeof (paramfw::meta), sim);

    // 注册回调函数
    reg->subscribe (paramfw::on_param_change);

    // 更新变量的值
    reg->set_as ("PARAM_4", static_cast<int32_t> (44));

    // 保存
    reg->save ();

    // 重置
    reg->reset_to_default ();

    // 重新加载
    reg->load ();

    // 获取变量的值
    if (std::int32_t p4; reg->get_as ("PARAM_4", p4))
        std::printf ("PARAM_4 = %d\n", p4);

    return 0;
}
